﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Com.Binaria.Core;
using Com.Binaria.Core.Enumeracion;
using Com.Binaria.Core.Exceptions;
using Com.Binaria.SISCOB.DTO;
using Com.Binaria.SISCOB.Dom;
using Com.Binaria.SISCOB.Funcional.DTO;

namespace Com.Binaria.SISCOB.Mgr
{

    public class SucursalMgr : ISucursalMgr
    {
        #region ATRIBUTOS A EXPONER AL USUARIO
        public ISucursalDom iSucursalDom;
        #endregion

        #region Miembros de ISucursalMgr
        public SucursalFuncionalDTO GetById(ContextoDTO oContexto, System.Int32? Id)
        {
            SucursalFuncionalDTO oItem = null;
            //
            try
            {
                SucursalDTO tmp = iSucursalDom.BuscarSucursalPorId(oContexto, Id);
                if (tmp != null)
                {
                    oItem = new SucursalFuncionalDTO();
                    oItem.Id = tmp.Id;
                    oItem.Descripcion = tmp.Descripcion;
                    oItem.EstaActivo = Convert.ToBoolean(tmp.EstaActivo);
                }
            }
            catch (Exception ex) { throw new ManagerException(ex.Message, System.Diagnostics.TraceEventType.Warning); }
            return oItem;
        }

        public IList<SucursalFuncionalDTO> GetAll(ContextoDTO oContexto)
        {
            IList<SucursalFuncionalDTO> oItem = null;
            //
            try
            {
                IList<SucursalDTO> tmp = iSucursalDom.BuscarSucursalTodos(oContexto);
                if (tmp != null)
                {
                    oItem = new List<SucursalFuncionalDTO>(tmp.Count);
                    for (int i = 0; i < tmp.Count; i++)
                    {
                        SucursalFuncionalDTO oFDto = new SucursalFuncionalDTO();
                        oFDto.Id = tmp[i].Id;
                        oFDto.Descripcion = tmp[i].Descripcion;
                        oFDto.EstaActivo = Convert.ToBoolean(tmp[i].EstaActivo);
                        //
                        oItem.Add(oFDto);
                    }
                }
            }
            catch (Exception ex) { throw new ManagerException(ex.Message, System.Diagnostics.TraceEventType.Warning); }
            return oItem;
        }

        public IList<SucursalFuncionalDTO> GetBy(ContextoDTO oContexto, SucursalFuncionalDTO item)
        {
            IList<SucursalFuncionalDTO> oItem = null;
            //
            try
            {
                IList<SucursalDTO> tmp = null;
                if (item == null)
                    tmp = iSucursalDom.BuscarSucursalTodos(oContexto);
                else
                {
                    SucursalDTO oDto = new SucursalDTO();
                    oDto.Id = item.Id;
                    if (!string.IsNullOrEmpty(item.Descripcion)) oDto.Descripcion = item.Descripcion;
                    //
                    tmp = iSucursalDom.BuscarSucursalFiltro(oContexto, oDto);
                }

                if (tmp != null)
                {
                    oItem = new List<SucursalFuncionalDTO>(tmp.Count);
                    for (int i = 0; i < tmp.Count; i++)
                    {
                        SucursalFuncionalDTO oFDto = new SucursalFuncionalDTO();
                        oFDto.Id = tmp[i].Id;
                        oFDto.Descripcion = tmp[i].Descripcion;
                        oFDto.EstaActivo = Convert.ToBoolean(tmp[i].EstaActivo);
                        //
                        oItem.Add(oFDto);
                    }
                }
            }
            catch (Exception ex) { throw new ManagerException(ex.Message, System.Diagnostics.TraceEventType.Warning); }
            return oItem;
        }

        public bool Save(ContextoDTO oContexto, SucursalFuncionalDTO item)
        {
            bool IsOK = false;
            bool IsExist = (item.Id.HasValue && item.Id > 0);
            List<int> oUpd = null;
            try
            {

                SucursalDTO oDto = new SucursalDTO();
                oDto.Id = item.Id;
                oDto.Descripcion = item.Descripcion;
                oDto.EstaActivo = item.EstaActivo;

                if (IsExist)
                    iSucursalDom.RegistrarSucursal(oContexto, new List<SucursalDTO>() { oDto }, EnumRegistrarAccion.Modificar);
                else
                    iSucursalDom.RegistrarSucursal(oContexto, new List<SucursalDTO>() { oDto }, EnumRegistrarAccion.Agregar);

                IsOK = true;
            }
            catch (Exception ex) { throw new ManagerException(ex.Message, System.Diagnostics.TraceEventType.Warning); }
            return IsOK;
        }

        public bool Delete(ContextoDTO oContexto, SucursalFuncionalDTO item)
        {
            bool IsOK = false;
            bool IsExist = (item.Id.HasValue && item.Id > 0);

            try
            {
                SucursalDTO oDto = new SucursalDTO();
                oDto.Id = item.Id;
                
                if (IsExist)
                {
                    iSucursalDom.RegistrarSucursal(oContexto, new List<SucursalDTO>() { oDto }, EnumRegistrarAccion.Eliminar);
                }
                IsOK = true;
            }
            catch (Exception ex) { throw new ManagerException(ex.Message, System.Diagnostics.TraceEventType.Warning); }
            return IsOK;
        }
        #endregion
    }
}
